package tmt.usercenter.web.vo;

import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;

/**
 * 前台通知信息
 */
@Getter
@Setter
public class Notify implements Serializable {

	/** 前台通知级别，依据前台插件，可能不会有这么多级别 */
	public enum Level {
		SUCCESS, INFO, WARNING, DANGER;

		/**
		 * 从任意大小写字符转换为该枚举类型
		 *
		 * @param str level 字符
		 * @return Level 枚举，如果不匹配可能为 null
		 */
		public static Level from(String str) {
			Objects.requireNonNull(str);
			return Arrays.stream(Level.values()).filter(c -> Objects.equals(str.toLowerCase(), c.name().toLowerCase())).findFirst().orElse(null);
		}
	}

	/** 前台通知类型 */
	public enum Type {
		ALERT, NOTIFY
	}

	private Type type;
	private Level level;
	private String title;
	private String message;
	private String icon;
	private String url;
	private Map<String, Object> extra;

	public Notify() {
	}

	public Notify(Type type) {
		this.type = type;
	}

	/**
	 * 创建阻塞弹窗
	 *
	 * @param level   级别
	 * @param title   标题
	 * @param message 信息
	 * @return notify
	 */
	public static Notify alert(Level level, String title, String message) {
		Notify n = new Notify(Type.ALERT);
		n.setLevel(level);
		n.setTitle(title);
		n.setMessage(message);

		return n;
	}

	/**
	 * 创建提示通知
	 *
	 * @param level   级别
	 * @param title   标题
	 * @param message 消息
	 * @return notify
	 */
	public static Notify notify(Level level, String title, String message) {
		Notify n = new Notify(Type.NOTIFY);
		n.setLevel(level);
		n.setTitle(title);
		n.setMessage(message);

		return n;
	}

}
